package edu.tfh.s2.ehkbot.gerete;

import edu.tfh.s2.ehkbot.daten.AdressenDispatcher;
import edu.tfh.s2.ehkbot.daten.InitFactory;
import edu.tfh.s2.ehkbot.gerete.aktoren.MotorAktor;
import edu.tfh.s2.ehkbot.gerete.sensoren.Sensor;

/**
 * Die Hebebühne nimmt die Warenbox und hält sie Fest.
 * 
 * @author s2zehn
 */
public class Hebebuehne {

	static private double halteDrehwert = -Math.PI * 3;

	public static final String modulName = "Hebebuehne";
	static private double oeffnenDrehwert = Math.PI * 3;
	static private double positionOben = Math.PI * 30;
	static private double positionUnten = Math.PI * 30;
	private Sensor gewicht;
	private MotorAktor halteMotor;
	private MotorAktor hebebuehnenMotor;
	private Sensor hoehe;

	/**
	 * Konstruktor für Hebebuehne.
	 */
	public Hebebuehne() {
		InitFactory initf = InitFactory.getInstance();
		AdressenDispatcher adrD = AdressenDispatcher.getInstance();
		hoehe = initf.getSensor(adrD.getAdresseFor(modulName, "hoehe"));
		gewicht = initf.getSensor(adrD.getAdresseFor(modulName, "gewicht"));
		halteMotor = initf.getMotorAktor(adrD.getAdresseFor(modulName, "halteMotor"));
		hebebuehnenMotor = initf.getMotorAktor(adrD.getAdresseFor(modulName, "hebebuehnenMotor"));
	}

	/**
	 * Liefert das Gewicht welches auf der Hebebühne lastet.
	 * 
	 * @return Das gewicht in Gramm.
	 */
	public double gewicht() {
		return gewicht.getMesswert();
	}

	/**
	 * Aktiviert die Haltevorrichtung.
	 */
	public void halten() {
		halteMotor.drehe(halteDrehwert);
	}

	/**
	 * Deaktiviert die Haltevorrrichtung.
	 */
	public void oeffnen() {
		halteMotor.drehe(oeffnenDrehwert);
	}

	/**
	 * Stellt die Hebebühnen Platform auf die Höhe ein.
	 * 
	 * @param hoehe_mm
	 *            Die Hähne über den Roboter.
	 */
	public void stelleHoehe(int hoehe_mm) {
		hebebuehnenMotor.drehe(positionUnten);
		hebebuehnenMotor.waitUntilDone();
		hebebuehnenMotor.drehe(positionOben);
		while (hoehe.getMesswert() != hoehe_mm) {
		}
		hebebuehnenMotor.stope();
	}
}